package com.southgis.ibase.sql.builder;

import java.util.Objects;

import org.apache.commons.lang3.StringUtils;

import com.southgis.ibase.sql.builder.SqlBuilder.SelectSqlBuilder;

/**
 * 通过sql查询结果表示的临时表，比如：赋值的子sql、条件中的子sql、join中的子sql等。
 * @author dnnyo
 *
 */
class SqlTable extends Table
{
	SelectSqlBuilder sql;
	SqlTable(SelectSqlBuilder sql, String alias)
	{
		super(alias);
		this.sql=sql;
	}
	
	@Override
	public String getAlias()
	{
		String temp=alias;
//		if(CheckUtil.isNullorEmpty(temp))
//			throw new ServiceException("sql语句做为表对象，要设置别名");
		return temp;
	}
	
	@Override
	public void toSql(int section,StringBuilder sb)
	{
		//0-select，1-where|having，2-XBy，3-join|from
		sql.func=this.func;
		sb.append("(").append(sql.build()).append(")");
		
		if(section==SqlBuilder.BUILD_SECTION_FROMJOIN) {
			String temp=getAlias();
			if(!StringUtils.isEmpty(temp))
				sb.append(" ").append(getAlias());
		}
	}
	
	@Override
	public boolean equals(Object obj)
	{
		if(obj==null) return false;
		if(this==obj) return true;
		if(!(obj instanceof SqlTable)) return false;
		return Objects.equals(this.sql, ((SqlTable)obj).sql);
	}
	@Override
	public int hashCode()
	{
		return Objects.hash(this.getClass(), this.sql);
	}
	
	@Override
	public String toString()
	{
		return (sql==null?"":"{sql table}@")+(alias!=null?("["+alias+"]"):"");
	}
}